package snowflake

import (
	sf "github.com/bwmarrin/snowflake"
	"time"
)

// node 是一个全局的雪崩算法节点指针
var node *sf.Node

// Init 初始化雪崩算法节点
// startTime - 雪崩算法的起始时间点，格式为"2006-01-02"
// machineID - 当前机器的唯一标识符
func Init(startTime string, machineID int64) (err error) {
	// 解析传入的起始时间，将其转换为Unix时间戳
	var st time.Time
	st, err = time.Parse("2006-01-02", startTime)
	if err != nil {
		return
	}
	// 设置雪崩算法的起始时间点
	sf.Epoch = st.UnixNano() / 1000000
	// 根据机器ID生成雪崩算法节点
	node, err = sf.NewNode(machineID)
	return
}

// GenID 生成一个全局唯一的ID
func GenID() int64 {
	// 通过雪崩算法节点生成一个ID，并返回其Int64表示形式
	return node.Generate().Int64()
}
